﻿using System;
using System.Collections;
using System.Windows.Forms;

namespace WoTcalculator
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            listView2.ListViewItemSorter = itemComparer;
        }

        public string Ver = "v.1.0.4";

        private void ListView1DoubleClick1(object sender, EventArgs e)
        {
            foreach (ListViewItem lvi in ((ListView) sender).SelectedItems)
            {
                var nlvi = new ListViewItem(lvi.Text);
                foreach (ListViewItem.ListViewSubItem item in lvi.SubItems)
                {
                    if (item.Text != nlvi.Text)
                        nlvi.SubItems.Add(item.Text);
                }
                ListViewItem listViewItem = listView2.Items.Add(nlvi);
                switch (lvi.Group.Name)
                {
                    case "listViewGroup1": nlvi.Group = listView2.Groups["1"];
                        break;
                    case "listViewGroup2": nlvi.Group = listView2.Groups["1"];
                        break;
                    case "listViewGroup3": nlvi.Group = listView2.Groups["1"];
                        break;
                    case "listViewGroup4": nlvi.Group = listView2.Groups["2"];
                        break;
                    case "listViewGroup5": nlvi.Group = listView2.Groups["3"];
                        break;
                }
                
            }
            ListView2ItemsChanged();
        }

        private void ToolStripButton2Click(object sender, EventArgs e)
        {
            if (MessageBox.Show(@"Очистить?","Вопрос", MessageBoxButtons.YesNo, MessageBoxIcon.Question)==DialogResult.Yes)
            if (listView2.Items.Count>0)
                listView2.Items.Clear();
            ListView2ItemsChanged();
        }


        private void ToolStripButton1Click(object sender, EventArgs e)
        {
            listView2.Items[listView2.SelectedIndices.Count].Remove();

            ListView2ItemsChanged();
        }

       private void ListView2ItemsChanged()
        {
            label3.Text = listView2.Items.Count.ToString();
            var ves = 0;
            var tanks = 0;
            var pt = 0;
            var art = 0;
            foreach (ListViewItem lvi in listView2.Items)
            {
                foreach (ListViewItem.ListViewSubItem item in lvi.SubItems)
                {
                    if (item.Text != lvi.Text)
                        ves += Int32.Parse(item.Text);
                }
                switch (lvi.Group.Name)
                {
                    case "1":
                        tanks += 1;
                        break;
                    case "2":
                        pt += 1;
                        break;
                    case "3":
                        art += 1;
                        break;
                }
            }
            label5.Text = ves.ToString();
            label9.Text = tanks.ToString();
            label11.Text = pt.ToString();
            label13.Text = art.ToString();
        }

        private void ToolStripButton3Click(object sender, EventArgs e)
        {
            if (listView2.Items.Count>0)
            {
                var st = "[list=1]";
                foreach (ListViewItem item in listView2.Items)
                {
                    var tnk = "[*][b]";
                    tnk += item.Text + "[/b] Уровень: ";
                    foreach (ListViewItem.ListViewSubItem itm in item.SubItems)
                    {
                        if (itm.Text != item.Text)
                            tnk += itm.Text;
                    }
                    st += tnk;
                }
                st += "[/list]";
               st += "[b][u]ИТОГО[/u][/b]: " + label5.Text;
                var fm = new Form2 {textBox1 = {Text = st}};
                fm.ShowDialog();
                fm.textBox1.SelectAll();

                fm.Dispose();
            }
            else
            {
                MessageBox.Show(@"Экспортировать нечего", @"Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void ListView1MouseEnter(object sender, EventArgs e)
        {
            Text = string.Format(@"W.o.T. Calculator {0}   Элементы добавляются двойным щелчком мыши", Ver);
        }

        private void ListView1MouseLeave(object sender, EventArgs e)
        {
            Text = string.Format(@"W.o.T. Calculator {0}", Ver);
        }

        private void ListView2DoubleClick(object sender, EventArgs e)
        {
            listView2.Items.Remove(listView2.SelectedItems[0]);

            ListView2ItemsChanged();
        }

        private void ListView2MouseEnter(object sender, EventArgs e)
        {
            Text = string.Format(@"W.o.T. Calculator {0}   Элементы удаляются двойным щелчком мыши", Ver);
        }

        private void ListView2MouseLeave(object sender, EventArgs e)
        {
            Text = string.Format(@"W.o.T. Calculator {0}", Ver);
        }

        private void ListView2ColumnClick(object sender, ColumnClickEventArgs e)
        {
            itemComparer.ColumnIndex = e.Column;
            ((ListView)sender).Sort();
        }

        private void TrackBar1Scroll(object sender, EventArgs e)
        {
            Opacity = (double)trackBar1.Value/100;
        }

        private void CheckBox1CheckedChanged(object sender, EventArgs e)
        {
            TopMost = checkBox1.Checked;
        }
    }

    class ItemComparer : IComparer
    {
        int columnIndex = 0;
        bool sortAscending = true;
        //Это свойство инициализируется при каждом клике на column header'e
        public int ColumnIndex
        {
            set
            {
                //предыдущий клик был на этой же колонке?
                if (columnIndex == value)
                    //да - меняем направление сортировки
                    sortAscending = !sortAscending;
                else
                {
                    columnIndex = value;
                    sortAscending = true;
                }
            }
        }
        //здесь непосредственно производится сравнение
        //возвращаемые значения:
        // < 0 если x < y
        // 0 если x = y
        // > 0 если x > y
        public int Compare(object x, object y)
        {
            string value1 = ((ListViewItem)x).SubItems[columnIndex].Text;
            string value2 = ((ListViewItem)y).SubItems[columnIndex].Text;
            return String.Compare(value1, value2) * (sortAscending ? 1 : -1);
        }
    } 

}
